/*
 * Copyright (C) 2025 Tsingteng MicroSystem
 *
 * Licensed under the Apache License, Version 2.0 (the "License");
 * you may not use this file except in compliance with the License.
 * You may obtain a copy of the License at
 *
 * http://www.apache.org/licenses/LICENSE-2.0
 *
 * Unless required by applicable law or agreed to in writing, software
 * distributed under the License is distributed on an "AS IS" BASIS,
 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 * See the License for the specific language governing permissions and
 * limitations under the License.
 */
#ifndef _NCI_CORE_H_
#define _NCI_CORE_H_

/**
 * @file nci_core.h
 * @brief 定义NCI CORE group相关的操作API
*/

#include "nci_base.h"

/** @brief 电源子状态定义 */
typedef enum {
    /** @brief 亮屏解锁 */
    NCI_POWER_SUB_STATE_ON_UNLOCKED = 0x00,
    /** @brief 灭屏解锁 */
    NCI_POWER_SUB_STATE_OFF_UNLOCKED,
    /** @brief 亮屏锁屏 */
    NCI_POWER_SUB_STATE_ON_LOCKED,
    /** @brief 灭屏锁屏 */
    NCI_POWER_SUB_STATE_OFF_LOCKED,
    NCI_POWER_SUB_STATE_INVALID = 0xFF
} tNCI_POWER_SUB_STATE;

/**
 * @brief 发送NCI CORE RESET命令
 *
 * @param[in] reset_type 复位类型
 * @param[out] p_ntf 用于保存复位结果的tNCI_CORE_RESET_NTF结构体指针,可以为NULL
 *
 * @return NCI_STATUS_OK 发送成功
 *         其他 发送失败
*/
tNCI_STATUS nci_core_reset(tNCI_RESET_TYPE reset_type, tNCI_CORE_RESET_NTF *p_ntf);
/**
 * @brief 发送NCI CORE INIT命令
 *
 * @param[out] p_resp 用于保存初始化结果的tNCI_INIT_RESP结构体指针,可以为NULL
 *
 * @return NCI_STATUS_OK 发送成功, 其他 发送失败
*/
tNCI_STATUS nci_core_init(tNCI_INIT_RESP *p_resp);
/**
 * @brief 发送NCI CORE SET_COFNIG命令
 *
 * @param regs 需要设置的寄存器数组
 * @param len 寄存器数组长度
 *
 * @return 发送成功返回NCI_STATUS_OK, 其他 发送失败
*/
tNCI_STATUS nci_core_set_config(tNCI_REG* regs, uint8_t size);
/**
 * @brief 发送NCI CORE GET_CONFIG命令
 *
 * @param[in] reg_ids 需要获取的寄存器ID数组
 * @param[in] len 寄存器ID数组长度
 * @param[out] regs 用于保存结果的寄存器数组
 *
 * @return 发送成功返回NCI_STATUS_OK, 其他 发送失败
*/
tNCI_STATUS nci_core_get_config(tNCI_REG_ID *reg_ids, uint8_t size, tNCI_REG *regs);
/**
 * @brief 发送NCI CORE_CONN_CREATE命令
 *
 * @param[in] type 连接的类型
 * @param[in] params 连接参数
 * @param[in] size 连接参数个数
 * @param[out] channel_info 如果创建通道成功，则通过此返回连接信息
 *
 * @return 发送成功返回NCI_STATUS_OK, 其他 发送失败
*/
tNCI_STATUS nci_core_conn_create(tNCI_DESTINATION_TYPE type, tNCI_DEST_SPEC_PARAM* params, uint8_t size, tNCI_DATA_CHANNEL_INFO *channel_info);
/**
 * @brief 发送NCI CORE_CONN_CLOSE命令
 *
 * @param conn_id 需要关闭的conn_id
 *
 * @return 发送成功返回NCI_STATUS_OK, 其他 发送失败
*/
tNCI_STATUS nci_core_conn_close(uint8_t conn_id);

/**
 * @brief 设置电源子状态
 *
 * @param power_state 状态
 *
 * @return NCI_STATUS_OK 发送成功, 其他 发送失败
 */
tNCI_STATUS nci_core_set_power_sub_state(tNCI_POWER_SUB_STATE power_state);

/**
 * @brief 处理NCI CORE相关的通知事件
 *
 * @param oid 事件的OID类型
 * @param data 事件的payload数据
 * @param data_len payload数据的长度
*/
void nci_core_ntf_handle(uint8_t oid, uint8_t *data, uint16_t data_len);
/**
 * @brief 处理NCI CORE_CONN_CREDITS通知
 *
 * @param data NTF的payload数据
 * @param data_len NTF的payload数据长度
*/
void nci_core_conn_credits(uint8_t *data, uint16_t data_len);

#endif /* _NCI_CORE_H_ */
